const http = require('http');
const fs = require('fs');
// 服务端使用 模板引擎
const template = require('art-template');

// 引入url模块
const url = require('url');

let comments = [
    {
        name: 'Trump',
        comment: 'It is unbelievable',
        timing: '2018-10-10'
    },
    {
        name: 'Terisa',
        comment: 'What a world',
        timing: '2018-10-12'
    },
    {
        name: 'Deekly',
        comment: 'Stupid Man',
        timing: '2018-11-19'
    },
    {
        name: 'Zera',
        comment: 'Dirty Guys',
        timing: '2018-12-01'
    },
    {
        name: 'Huston',
        comment: 'Kick His Ass',
        timing: '2018-12-04'
    }
];

// 对于这种 URl表单提交路径
//因为其中含有动态的用户填写内容 所以你不可能通过判断完整的url路径来处理这个请求
// 只要判断url模块


// 方便处理这些静态资源，约定把所有的资源存放在 public 目录中，要访问这些开放的资源，
// 需要将 /public 开放出来,
http
    .createServer(function (req,res) {

        let {query,pathname} = url.parse(req.url,true);
        if (pathname === '/') {
            fs.readFile('./views/index.html',(err,data)=>{
                if (err) {
                    return res.end('404 Not Found');
                } 
                // 注意 这里的data数据类型是二进制或者是字符类型 如果不对data做二次操作
                // 就不需要转化JSON.stringfy(data)

                // 这时取过来的data是二进制 需要转化为字符串
                let str = data.toString();

                // 模板引擎的渲染
                let htmlStr = template.render(str,{
                    comments: comments
                });
                res.end(htmlStr);
            })
        } else if (pathname === '/post') {

            // 所有资源都在 public 中，
            // 读取文件即可
            fs.readFile('./views/post.html',(err,data)=>{
                if (err) {
                    console.log('404 Not Found');
                }
                res.end(data);
            })
        } else if (pathname.indexOf('/public/') === 0) {

            // 所有资源都在 public 中，
            // 读取文件即可
            fs.readFile('.' + pathname,(err,data)=>{
                if (err) {
                    console.log('404 Not Found');
                }

                res.end(data);
            })
        } else if (pathname === '/pinglun') {  // 如果请求发布评论的这个URL
            // res.end(JSON.stringify(query)); // query 是对象，end直接收二进制或者字符串

            // 使用 url 模块中的 parse 方法 ，将请求路径的查询的字符串解析成一个对象 query
            // 然后把新增的这个对象添加到评论列表中去即可  重定向到首页   用户请求'/' 数组中的数据发生变化
            query.timing = '2018-12-11';
            comments.unshift(query);
                
            // 数据添加好了，处理完毕，这时候请求  '/' 首页，可以重定向
            // 通过服务器让客户端重定向
            //  1-302状态码 临时重定向 statusCode
            // 在响应头中通过location中告诉客户端重定向  setHeader
            // 客户端发现受到服务器的相应状态码为302 就会在响应头中去找location设置为重定向的url
            res.statusCode = 302;
            res.setHeader('Location','/');
            res.end(); // 要结束响应
        } else {
            // 其他的都处理成 404
            fs.readFile('./views/404.html',(err,data)=>{
                if (err) {
                    return res.end('404 Not Found');
                } 
                res.end(data);
            });
        }
    })
    .listen(4000,function () {  
        console.log('server is running on port 4000');
    })